package ar.edu.utn.frba.tacs.warnes.rest;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import ar.edu.utn.frba.tacs.warnes.entities.Pedido;
import ar.edu.utn.frba.tacs.warnes.entities.Pieza;
import ar.edu.utn.frba.tacs.warnes.pojos.PedidoPojo;
import ar.edu.utn.frba.tacs.warnes.pojos.PedidoPojoList;
import ar.edu.utn.frba.tacs.warnes.pojos.PiezaPojoList;
import ar.edu.utn.frba.tacs.warnes.utils.ContenedorWarnes;

/**
 * 
 * @author Diego
 * 
 */
@WebService
@Path("/pedidos/")
@Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class PedidoResource extends WarnesResource {
	public PedidoResource() {
		super();
	}

	/**
	 * Obtiene la lista de pedidos
	 * 
	 * @return
	 */
	@WebMethod
	@GET
	@Path("/pedidos")
	public PedidoPojoList getPedidos() {
		List<Pedido> pedidos = ContenedorWarnes.getInstance().getPedidos();
		PedidoPojoList pedidosPojo = new PedidoPojoList(pedidos);
		return pedidosPojo;
	}

	/**
	 * efectiviza un pedido
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@PUT
	@Path("id/{id}/efectivizar")
	public void getEfectivizarPedidoPorId(@PathParam("id") Long id) {
		Pedido pedido = ContenedorWarnes.getInstance().getPedido(id);
		pedido.efectivizar();
	}

	/**
	 * Obtiene un unico pedido por id
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@GET
	@Path("id/{id}")
	public PedidoPojo getPedidoPorId(@PathParam("id") Long id) {
		Pedido pedido = ContenedorWarnes.getInstance().getPedido(id);
		PedidoPojo pedidoPojo = new PedidoPojo(pedido);
		return pedidoPojo;
	}

	/**
	 * Obtiene las piezas del pedido
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@GET
	@Path("id/{id}/piezas")
	public PiezaPojoList getPiezasDelAutoPorId(@PathParam("id") Long id) {
		Pedido pedido = ContenedorWarnes.getInstance().getPedido(id);
		PiezaPojoList piezaPojoList = new PiezaPojoList(pedido.getPiezas());
		return piezaPojoList;
	}

	/**
	 * Crea un nuevo pedido
	 * 
	 * @param pedido
	 * @return
	 */
	@WebMethod
	@POST
	@Path("/agregar/nuevo")
	public PedidoPojoList addPedido(@PathParam("patente") String patente) {
		ContenedorWarnes.getInstance().crearUnPedido(new ArrayList<Pieza>())
				.save();
		List<Pedido> pedidos = ContenedorWarnes.getInstance().getPedidos();
		PedidoPojoList pedidosPojo = new PedidoPojoList(pedidos);
		return pedidosPojo;
	}

	/**
	 * Borra el pedido indicado
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@DELETE
	@Path("/borrar/ultimo")
	public void deletePedido(@PathParam("patente") String patente) {
		List<Pedido> pedidos = ContenedorWarnes.getInstance().getPedidos();
		ContenedorWarnes.getInstance().borrarPedido(
				pedidos.get(pedidos.size() - 1));
	}
	
	/**
	 * Obtiene el ultimo pedido creado
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@GET
	@Path("ultimo")
	public PedidoPojo getUltimoPedidoCreado(@PathParam("id") Long id) {
		List<Pedido> pedidos = ContenedorWarnes.getInstance().getPedidos();
		PedidoPojo pedidoPojo = new PedidoPojo(pedidos.get(pedidos.size() - 1));
		return pedidoPojo;
	}
}
